package controllers;

import java.util.Date;
import java.util.List;
import java.util.Vector;

import views.UbicacionesTablePanel;
import business.interfaces.ICalendarioClase;
import business.interfaces.ICalendarioReserva;
import business.services.IServicioCanchas;
import business.services.IServicioClases;
import business.services.IServicioClientes;
import business.services.IServicioReservas;
import business.services.ServiceException;
import business.services.ServicioCanchas;
import business.services.ServicioClases;
import business.services.ServicioClientes;
import business.services.ServicioReservas;

public class ClasesController implements IErrorObservable {
	private List<IErrorObserver> observers;
	private IServicioClientes servicioClientes;
	private IServicioClases servicioClases;
	
	public ClasesController() {
		observers = new Vector<IErrorObserver>();
		servicioClientes = new ServicioClientes();
		servicioClases = new ServicioClases(servicioClientes);
	}

	public List<ICalendarioClase> getClasesDisponibles() {
		List<ICalendarioClase> clasesDisponibles = null;
		try {
			clasesDisponibles = servicioClases.getClasesDisponibles();
		} catch (ServiceException e) {
			this.notificarErrorObservers(e.getMessage());
		}
		return clasesDisponibles;
	}
	
	public boolean cargarClase(String dni, Integer dia, Integer hora, Integer cantidadPorMes) {
		boolean claseCreada = true;
		try {
			servicioClases.cargarClase(dni, dia, hora, cantidadPorMes);
		} catch (ServiceException e) {
			claseCreada = false;
			this.notificarErrorObservers(e.getMessage());
		}
		
		return claseCreada;
	}
	
	public List<IErrorObserver> getErrorObservers() {
		return this.observers;
	}

	public void agregarErrorObserver(IErrorObserver observer) {
		this.observers.add(observer);
	}

	public void removerErrorObserver(IErrorObserver observer) {
		this.observers.remove(observer);
	}

	public void notificarErrorObservers(String error) {
		for (IErrorObserver observer : this.observers) {
			observer.notificarError(error);
		}
	}
}
